package com.qf.blog.controller.web;

import com.alibaba.druid.sql.visitor.functions.If;
import com.alibaba.fastjson.JSON;
import com.qf.blog.core.constants.BaseConstants;
import com.qf.blog.core.servlet.BaseServlet;
import com.qf.blog.core.utils.EmailUtils;
import com.qf.blog.dto.EmailDto;
import com.qf.blog.entity.UserEntity;
import com.qf.blog.service.UserService;
import com.qf.blog.service.serviceimpl.UserServiceImpl;

import javax.servlet.annotation.WebServlet;

/**
 * @author zyt
 * @version 1.0
 */
@WebServlet ("/UserServlet/*")
public class UserServlet extends BaseServlet {
    // 先创建一个service对象
    private  UserService userService = new UserServiceImpl();


    public String register() throws Exception{

        //1.获取json数据
        // 获取reader的读写流 readLine是一行一行的读
        String s = req.getReader().readLine();
        //2.把获取到的json数据转成对象
        UserEntity userEntity = JSON.parseObject(s, UserEntity.class);
        //3.判断用户的邮箱和密码是否已经被注册 用登录的用户名作为条件去查询
        // 调用servise的register方法

        System.out.println(userEntity);
        userService.register(userEntity);
        String activationCode = userEntity.getActivationCode(); // 这个是取出激活码
        // 给用户的邮箱发送激活账号的连接
        // 创建邮件的封装类对象
        EmailDto emailDto = new EmailDto();
        emailDto.setTilte("blog新用户账号注册激活"); // 标题
        emailDto.setToUser(userEntity.getEmail()); // 邮箱
        emailDto.setContent("<a href = 'http://127.0.0.1:8080/UserServlet/activation?code=" + activationCode + "'>点击这里激活</a>");
        // 调用EmailUtils的发送邮件的方法  把邮件内容当作参数传进去
        EmailUtils.sendEmailInfoUser(emailDto);

        // 提示用户
        return outJson(true);
    }

    /**
     * 激活账号 （）注册
     * @return
     */
    public  String activation() throws  Exception{
        // 1. 先获取激活码
        String activationCode = req.getParameter("code");

        // 把激活码输出在控制台
        System.out.println("激活码是++++++++++++++++"+activationCode);
        // 验证
        UserEntity userEntity = userService.byActivationCode(activationCode);
        // 判断激活码

        if (userEntity== null){
            // 输出在控制台给自己看
            System.out.println("激活码有误");
            // 在前端弹窗提示
            return BaseConstants.BASE_SCRIPT+"激活码有误！";
        }else {
            userEntity.setStatus(2);  // 1:未激活，2：已激活，3：冻结
            userService.update(userEntity);
            // 用重定向的方式跳转页面
            return  BaseConstants.BASE_REDIRECT+":PageServlet/view/site/login.html";
        }
    }

    /**
     * 登录的
     * @return
     * @throws Exception
     */
    public String login() throws  Exception{

        //1.获取json数据
        // 获取reader的读写流 readLine是一行一行的读
        String s = req.getReader().readLine();
        // 把获取的到的json字符串转成对象
        UserEntity userEntity = JSON.parseObject(s, UserEntity.class);
        // 把用户的账号和密码获取
        userEntity=userService.login(userEntity.getUsername(),userEntity.getPassword());
        // 判断
        if(userEntity==null){ // 用户名密码不对
            return outJson(100,"用户名或密码不正确");
        }
        // 不为空就登录成功
        // 把密码置空
        userEntity.setPassword("");
        //然后放在json中
        //获取session，
        //setAttribute将数据以key-value的方式存在请求对象中
        req.getSession().setAttribute("loginUser",userEntity);

            return outJson(200,"登录成功！");
    }
    /**
     * 注销用户
     */
    public void logout() throws Exception {
        // 先获取session
        //invalidate是将session设置为失效
        req.getSession().invalidate();
        // 注销成功跳转页面
        // date没有数据要返回的 就null
        outView("view/site/login", null);
    }
}




